์ ํํ ์ฑ๋ฅ ์ถ์ ์ ์ํด CSS ํธ๋ ๊ท์น์ ํ์ฉํ๊ณ , ๋ณ๋ชฉ ํ์์ ํ์ ํ์ฌ ์น์ฌ์ดํธ์ ํ๋ฐํธ์๋ ์ฑ๋ฅ์ ์ต์ ํํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์ธ์.
CSS ํธ๋ ๊ท์น ๋ง์คํฐํ๊ธฐ: ์ฑ๋ฅ ์ถ์ ๋ฐ ์ต์ ํ ๊ฐ์ด๋
์ค๋๋ ์ ๋์งํธ ํ๊ฒฝ์์ ์น์ฌ์ดํธ ์ฑ๋ฅ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์ฌ์ฉ์๋ค์ ๋งค์ฐ ๋น ๋ฅธ ๋ก๋ฉ ์๊ฐ๊ณผ ์ํํ ์ํธ ์์ฉ์ ๊ธฐ๋ํฉ๋๋ค. ๋๋ฆฌ๊ฑฐ๋ ๋ฐ์์ด ์๋ ์น์ฌ์ดํธ๋ ์ฌ์ฉ์์ ๋ถ๋ง์ ์ด๋ํ๊ณ , ์ฐธ์ฌ๋๋ฅผ ๊ฐ์์ํค๋ฉฐ, ๊ถ๊ทน์ ์ผ๋ก ์์ต ์์ค๋ก ์ด์ด์ง ์ ์์ต๋๋ค. ํ๋ฐํธ์๋ ์ต์ ํ๋ ์ฐ์ํ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํ๋ฉฐ, CSS ํธ๋ ๊ท์น์ ์น์ฌ์ดํธ์ CSS ์ฑ๋ฅ์ ๋ชจ๋ํฐ๋งํ๊ณ ๊ฐ์ ํ๋ ๊ฐ๋ ฅํ ๋๊ตฌ์ ๋๋ค.
์ด ํฌ๊ด์ ์ธ ๊ฐ์ด๋๋ CSS ํธ๋ ๊ท์น์ ๋ณต์ก์ฑ์ ์์ธํ ๋ค๋ฃจ๋ฉฐ, ์ฑ๋ฅ์ ํจ๊ณผ์ ์ผ๋ก ์ถ์ ํ๊ณ , ๋ณ๋ชฉ ํ์์ ํ์ ํ๊ณ , ์ต์ ์ ์น์ฌ์ดํธ ์๋๋ฅผ ์ํด CSS๋ฅผ ์ต์ ํํ๋ ๋ฐ ํ์ํ ์ง์๊ณผ ์ค์ง์ ์ธ ๋จ๊ณ๋ฅผ ์ ๊ณตํฉ๋๋ค. ํธ๋ ๊ท์น์ ๊ธฐ๋ณธ ์ฌํญ๋ถํฐ ๊ณ ๊ธ ๊ตฌํ ๊ธฐ์ ๋ฐ ์ฑ๋ฅ ๋ถ์ ์ ๋ต๊น์ง ๋ชจ๋ ๊ฒ์ ๋ค๋ฃน๋๋ค.
CSS ํธ๋ ๊ท์น์ด๋ ๋ฌด์์ ๋๊น?
CSS Containment Module Level 2 ์ฌ์์ ์ผ๋ถ์ธ CSS ํธ๋ ๊ท์น์ ํน์ ๋ฒ์ ๋ด์์ CSS ์์ ์ ์ฑ๋ฅ์ ๋ชจ๋ํฐ๋งํ๊ธฐ ์ํ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํฉ๋๋ค. ๊ฐ๋ฐ์๊ฐ ์ฑ๋ฅ ์งํ๋ฅผ ์ ์ํ๊ณ ์ด๋ฅผ CSS ๊ท์น๊ณผ ์ฐ๊ฒฐํ์ฌ ๋ ๋๋ง ์๊ฐ ๋ฐ ๊ธฐํ ๊ด๋ จ ๋ฐ์ดํฐ๋ฅผ ์ ํํ๊ฒ ์ถ์ ํ ์ ์๋๋ก ํฉ๋๋ค.
JavaScript API ๋๋ ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ ๊ธฐ์กด์ ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง ๊ธฐ์ ๊ณผ ๋ฌ๋ฆฌ CSS ํธ๋ ๊ท์น์ ์ฑ๋ฅ ์ถ์ ์ ์ ์ธ์ ์ ๊ทผ ๋ฐฉ์์ ์ ๊ณตํฉ๋๋ค. CSS ๋ด์ ์ง์ ์ฑ๋ฅ ์งํ๋ฅผ ํฌํจ์ํด์ผ๋ก์จ, ์คํ์ผ์ํธ์ ๋ ๋๋ง ๋์์ ๋ํ ๋ ๊น์ ํต์ฐฐ๋ ฅ์ ์ป๊ณ ์ต์ ํ ์์ญ์ ์๋ณํ ์ ์์ต๋๋ค.
CSS ํธ๋ ๊ท์น ์ฌ์ฉ์ ์ด์
CSS ํธ๋ ๊ท์น์ ๊ตฌํํ๋ฉด ์น์ฌ์ดํธ ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง ๋ฐ ์ต์ ํ์ ๋ง์ ์ด์ ์ด ์์ต๋๋ค.
- ์ ํํ ์ฑ๋ฅ ์ธก์ : ํธ๋ ๊ท์น์ ์ฌ์ฉํ๋ฉด ํน์ CSS ๊ท์น์ ์ฑ๋ฅ์ ์ธก์ ํ์ฌ ๋ ๋๋ง ์๊ฐ ๋ฐ ๋ฆฌ์์ค ํ์ฉ๋์ ๋ํ ์ธ๋ถํ๋ ํต์ฐฐ๋ ฅ์ ์ป์ ์ ์์ต๋๋ค.
- ์ด๊ธฐ ๋ณ๋ชฉ ํ์ ๊ฐ์ง: ์ฑ๋ฅ ์งํ๋ฅผ ์ถ์ ํ์ฌ ๊ฐ๋ฐ ํ๋ก์ธ์ค ์ด๊ธฐ์ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์๋ณํ์ฌ ์ฌ์ฉ์ ๊ฒฝํ์ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ก ํ ์ ์์ต๋๋ค.
- ์ ์ธ์ ์ ๊ทผ ๋ฐฉ์: ํธ๋ ๊ท์น์ CSS ๋ด์์ ์ง์ ์ฑ๋ฅ ์งํ๋ฅผ ์ ์ํ๋ ์ ์ธ์ ๋ฐฉ์์ ์ ๊ณตํ์ฌ ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง์ ๋จ์ํํ๊ณ ๋ณต์กํ JavaScript ์ฝ๋์ ํ์์ฑ์ ์ค์ ๋๋ค.
- ํฅ์๋ ํ์ : CSS ๋ด์ ์ฑ๋ฅ ์งํ๋ฅผ ํฌํจ์ํค๋ฉด ๊ฐ๋ฐ์, ๋์์ด๋ ๋ฐ ์ฑ๋ฅ ์์ง๋์ด ๊ฐ์ ๋ ๋์ ์ปค๋ฎค๋์ผ์ด์ ๊ณผ ํ์ ์ ์ด์งํ ์ ์์ต๋๋ค.
- ๋ฐ์ดํฐ ๊ธฐ๋ฐ ์ต์ ํ: ํธ๋ ๊ท์น์ CSS ์ต์ ํ ์ ๋ต์ ๋ํ ์ ๋ณด์ ์ ๊ฐํ ๊ฒฐ์ ์ ๋ด๋ฆฌ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ๊ท์คํ ์ฑ๋ฅ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ์ฌ ์น์ฌ์ดํธ ์๋์ ์ฌ์ฉ์ ๊ฒฝํ์ ํฌ๊ฒ ๊ฐ์ ํ ์ ์์ต๋๋ค.
CSS ํธ๋ ๊ท์น ๊ตฌํ
CSS ํธ๋ ๊ท์น์ ๊ตฌํํ๋ ค๋ฉด ํธ๋ ์ปจํ ์คํธ๋ฅผ ์ ์ํ๊ณ , ์ฑ๋ฅ ์งํ๋ฅผ ์ง์ ํ๊ณ , ์ด๋ฅผ CSS ๊ท์น๊ณผ ์ฐ๊ฒฐํด์ผ ํฉ๋๋ค. ํธ๋ ๊ท์น์ ๊ตฌํํ๋ ๋จ๊ณ๋ณ ๊ฐ์ด๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1. ํธ๋ ์ปจํ ์คํธ ์ ์
ํธ๋ ์ปจํ
์คํธ๋ ์ฑ๋ฅ ์งํ๊ฐ ์ถ์ ๋ ๋ฒ์๋ฅผ ์ ์ํฉ๋๋ค. @track at-rule์ ์ฌ์ฉํ์ฌ ํธ๋ ์ปจํ
์คํธ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
@track my-context {
// Metric definitions go here
}
my-context ์๋ณ์๋ ํธ๋ ์ปจํ
์คํธ์ ๊ณ ์ ํ ์ด๋ฆ์
๋๋ค. ์ ํจํ CSS ์๋ณ์๋ฅผ ์ปจํ
์คํธ ์ด๋ฆ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
2. ์ฑ๋ฅ ์งํ ์ง์
ํธ๋ ์ปจํ
์คํธ ๋ด์์ metric descriptor๋ฅผ ์ฌ์ฉํ์ฌ ์ฑ๋ฅ ์งํ๋ฅผ ์ ์ํ ์ ์์ต๋๋ค. metric descriptor๋ ์งํ์ ์ด๋ฆ๊ณผ ๋ฐ์ดํฐ ์ ํ์ ์ง์ ํฉ๋๋ค.
@track my-context {
metric render-time <time>;
metric layout-count <number>;
}
์ด ์์ ์์๋ render-time(<time> ๊ฐ์ผ๋ก ๋ ๋๋ง ์๊ฐ์ ์ธก์ ) ๋ฐ layout-count(๋ ์ด์์ ์์
์๋ฅผ ์ถ์ )์ ๋ ๊ฐ์ง ์งํ๋ฅผ ์ ์ํ์ต๋๋ค.
3. ์งํ๋ฅผ CSS ๊ท์น๊ณผ ์ฐ๊ฒฐ
์ฑ๋ฅ ์งํ๋ฅผ CSS ๊ท์น๊ณผ ์ฐ๊ฒฐํ๋ ค๋ฉด track ์์ฑ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. track ์์ฑ์ ํน์ CSS ๊ท์น์ ๋ํด ์ถ์ ํ ํธ๋ ์ปจํ
์คํธ์ ์งํ๋ฅผ ์ง์ ํฉ๋๋ค.
.my-element {
track: my-context render-time, layout-count;
/* CSS rules for .my-element */
}
์ด ์์ ์์๋ render-time ๋ฐ layout-count ์งํ๋ฅผ .my-element CSS ๊ท์น๊ณผ ์ฐ๊ฒฐํ์ต๋๋ค. ๋ธ๋ผ์ฐ์ ๊ฐ .my-element ์์๋ฅผ ๋ ๋๋งํ ๋๋ง๋ค ๋ ๋๋ง ์๊ฐ๊ณผ ๋ ์ด์์ ์๋ฅผ ์ถ์ ํ๊ณ ๋ฐ์ดํฐ๋ฅผ ์ง์ ๋ ํธ๋ ์ปจํ
์คํธ์ ๋ณด๊ณ ํฉ๋๋ค.
CSS ํธ๋ ๊ท์น ๊ตฌํ์ ์ค์ ์
์ค์ ์๋๋ฆฌ์ค์์ CSS ํธ๋ ๊ท์น์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๋ช ๊ฐ์ง ์ค์ ์๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์์ 1: ๋ณต์กํ ์ ๋๋ฉ์ด์ ์ ๋ ๋๋ง ์๊ฐ ์ถ์
์น์ฌ์ดํธ ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น ๊ฒ์ผ๋ก ์์ฌ๋๋ ๋ณต์กํ CSS ์ ๋๋ฉ์ด์ ์ด ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. CSS ํธ๋ ๊ท์น์ ์ฌ์ฉํ์ฌ ์ ๋๋ฉ์ด์ ์ ๋ ๋๋ง ์๊ฐ์ ์ธก์ ํ ์ ์์ต๋๋ค.
@track animation-performance {
metric animation-time <time>;
}
.animated-element {
animation: my-animation 2s infinite;
track: animation-performance animation-time;
}
์ด ์์ ์์๋ animation-performance๋ผ๋ ํธ๋ ์ปจํ
์คํธ๋ฅผ ๋ง๋ค๊ณ ์ ๋๋ฉ์ด์
์ ๋ ๋๋ง ์๊ฐ์ ์ถ์ ํ๊ธฐ ์ํด animation-time์ด๋ผ๋ ์งํ๋ฅผ ์ ์ํ์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ animation-time ์งํ๋ฅผ .animated-element CSS ๊ท์น๊ณผ ์ฐ๊ฒฐํ์ต๋๋ค.
animation-time ์งํ๋ฅผ ๋ชจ๋ํฐ๋งํ์ฌ ์ ๋๋ฉ์ด์
์ด ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ์ผ์ผํค๋์ง ์๋ณํ๊ณ ์ด์ ๋ฐ๋ผ ์ต์ ํํ ์ ์์ต๋๋ค.
์์ 2: ๋์ ๋ ์ด์์์์ ๋ ์ด์์ ์ ์ธก์
๋น๋ฒํ ๋ฆฌํ๋ก์ฐ ๋ฐ ๋ฆฌํ์ธํธ๊ฐ ํฌํจ๋ ๋์ ๋ ์ด์์์ ์ฑ๋ฅ ์ง์ฝ์ ์ผ ์ ์์ต๋๋ค. CSS ํธ๋ ๊ท์น์ ์ฌ์ฉํ์ฌ ๋์ ๋ ์ด์์์์ ๋ ์ด์์ ์๋ฅผ ์ธก์ ํ ์ ์์ต๋๋ค.
@track layout-analysis {
metric layout-count <number>;
}
.dynamic-layout {
track: layout-analysis layout-count;
/* CSS rules for dynamic layout */
}
์ด ์์ ์์๋ layout-analysis๋ผ๋ ํธ๋ ์ปจํ
์คํธ๋ฅผ ๋ง๋ค๊ณ ๋ ์ด์์ ์์
์๋ฅผ ์ถ์ ํ๊ธฐ ์ํด layout-count๋ผ๋ ์งํ๋ฅผ ์ ์ํ์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ layout-count ์งํ๋ฅผ .dynamic-layout CSS ๊ท์น๊ณผ ์ฐ๊ฒฐํ์ต๋๋ค.
layout-count ์งํ๋ฅผ ๋ชจ๋ํฐ๋งํ์ฌ ๋์ ๋ ์ด์์์ด ๊ณผ๋ํ ๋ ์ด์์ ์์
์ ์ ๋ฐํ๋์ง ์๋ณํ๊ณ ๋ฆฌํ๋ก์ฐ ๋ฐ ๋ฆฌํ์ธํธ๋ฅผ ์ค์ด๊ธฐ ์ํด ์ต์ ํํ ์ ์์ต๋๋ค.
์์ 3: ์คํ์ผ ์ฌ๊ณ์ฐ ์๊ฐ ์ถ์
์คํ์ผ ์ฌ๊ณ์ฐ์ ํนํ ๋ณต์กํ CSS ์ ํ์์ ์์์ ์ฒ๋ฆฌํ ๋ ์๋นํ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ด ๋ ์ ์์ต๋๋ค. CSS ํธ๋ ๊ท์น์ ์ฌ์ฉํ์ฌ ํน์ CSS ๊ท์น์ ์คํ์ผ ์ฌ๊ณ์ฐ ์๊ฐ์ ์ธก์ ํ ์ ์์ต๋๋ค.
@track style-performance {
metric style-recalc-time <time>;
}
.complex-selector {
track: style-performance style-recalc-time;
/* CSS rules with complex selectors */
}
์ด ์์ ์์๋ style-performance๋ผ๋ ํธ๋ ์ปจํ
์คํธ๋ฅผ ๋ง๋ค๊ณ ์คํ์ผ ์ฌ๊ณ์ฐ ์๊ฐ์ ์ถ์ ํ๊ธฐ ์ํด style-recalc-time์ด๋ผ๋ ์งํ๋ฅผ ์ ์ํ์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ style-recalc-time ์งํ๋ฅผ .complex-selector CSS ๊ท์น๊ณผ ์ฐ๊ฒฐํ์ต๋๋ค.
style-recalc-time ์งํ๋ฅผ ๋ชจ๋ํฐ๋งํ์ฌ ๋ณต์กํ CSS ์ ํ์๊ฐ ๊ณผ๋ํ ์คํ์ผ ์ฌ๊ณ์ฐ์ ์ ๋ฐํ๋์ง ์๋ณํ๊ณ ์ฑ๋ฅ์ ๊ฐ์ ํ๊ธฐ ์ํด ์ต์ ํํ ์ ์์ต๋๋ค.
์ฑ๋ฅ ๋ฐ์ดํฐ ๋ถ์
CSS ํธ๋ ๊ท์น์ ๊ตฌํํ๊ณ ์ฑ๋ฅ ๋ฐ์ดํฐ๋ฅผ ์์งํ ํ ๋ค์ ๋จ๊ณ๋ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ์ฌ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์๋ณํ๊ณ CSS๋ฅผ ์ต์ ํํ๋ ๊ฒ์ ๋๋ค.
JavaScript์์ PerformanceObserver API๋ฅผ ์ฌ์ฉํ์ฌ CSS ํธ๋ ๊ท์น์์ ์์งํ ์ฑ๋ฅ ๋ฐ์ดํฐ์ ์ก์ธ์คํ ์ ์์ต๋๋ค.
const observer = new PerformanceObserver((list) => {
list.getEntries().forEach((entry) => {
console.log(entry.name, entry.duration);
});
});
observer.observe({ type: "element-timing", buffered: true });
์ด ์ฝ๋ ์กฐ๊ฐ์ CSS ํธ๋ ๊ท์น์์ ์์ฑ๋ element-timing ํญ๋ชฉ์ ์์ ํ๋ PerformanceObserver๋ฅผ ๋ง๋ญ๋๋ค. ๊ทธ๋ฐ ๋ค์ ๊ด์ฐฐ์๋ ๊ฐ ํญ๋ชฉ์ ์ด๋ฆ๊ณผ ์ง์ ์๊ฐ์ ์ฝ์์ ๊ธฐ๋กํฉ๋๋ค.
์ฑ๋ฅ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ์ฌ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ์ผ์ผํค๋ CSS ๊ท์น์ ์๋ณํ๊ณ ์ด๋ฅผ ์ต์ ํํ๊ธฐ ์ํ ์กฐ์น๋ฅผ ์ทจํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ํน์ CSS ์ ๋๋ฉ์ด์ ์ ๋ ๋๋งํ๋ ๋ฐ ๋๋ฌด ์ค๋ ๊ฑธ๋ฆฌ๊ฑฐ๋ ๋ณต์กํ CSS ์ ํ์๊ฐ ๊ณผ๋ํ ์คํ์ผ ์ฌ๊ณ์ฐ์ ์ ๋ฐํ๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
CSS ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ํ ๊ณ ๊ธ ๊ธฐ์
์ฑ๋ฅ ๋ชจ๋ํฐ๋ง์ ์ํด CSS ํธ๋ ๊ท์น์ ์ฌ์ฉํ๋ ๊ฒ ์ธ์๋ ์น์ฌ์ดํธ ์๋๋ฅผ ์ต์ ํํ๊ธฐ ์ํด CSS๋ฅผ ์ต์ ํํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ๋ช ๊ฐ์ง ๋ค๋ฅธ ๊ณ ๊ธ ๊ธฐ์ ์ด ์์ต๋๋ค.
- CSS ์ถ์ ๋ฐ ์์ถ: CSS๋ฅผ ์ถ์ํ๋ฉด ๊ณต๋ฐฑ ๋ฐ ์ฃผ์๊ณผ ๊ฐ์ ๋ถํ์ํ ๋ฌธ์๊ฐ ์ ๊ฑฐ๋์ด ํ์ผ ํฌ๊ธฐ๊ฐ ์ค์ด๋ญ๋๋ค. Gzip ๋๋ Brotli๋ฅผ ์ฌ์ฉํ์ฌ CSS๋ฅผ ์์ถํ๋ฉด ํ์ผ ํฌ๊ธฐ๊ฐ ๋์ฑ ์ค์ด๋ค์ด ๋ค์ด๋ก๋ ์๊ฐ์ด ๋นจ๋ผ์ง๋๋ค.
- CSS ์คํ๋ผ์ดํธ ์ฌ์ฉ: CSS ์คํ๋ผ์ดํธ๋ ์ฌ๋ฌ ์ด๋ฏธ์ง๋ฅผ ๋จ์ผ ์ด๋ฏธ์ง๋ก ๊ฒฐํฉํ์ฌ ์ด๋ฏธ์ง๋ฅผ ๋ก๋ํ๋ ๋ฐ ํ์ํ HTTP ์์ฒญ ์๋ฅผ ์ค์ ๋๋ค.
- @import ๋ฐฉ์ง:
@import์ง์๋ฌธ์ ๋ธ๋ผ์ฐ์ ๊ฐ ์ฌ๋ฌ CSS ํ์ผ์ ์์ฐจ์ ์ผ๋ก ๋ค์ด๋ก๋ํ๊ณ ๊ตฌ๋ฌธ ๋ถ์ํ๋๋ก ๊ฐ์ ํ์ฌ ํ์ด์ง ๋ ๋๋ง ์๋๋ฅผ ๋ฆ์ถ ์ ์์ต๋๋ค.<link>ํ๊ทธ๋ฅผ ๋์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ณ ๋ คํ์ญ์์ค. ์ด๋ฅผ ํตํด ๋ธ๋ผ์ฐ์ ๋ CSS ํ์ผ์ ๋ณ๋ ฌ๋ก ๋ค์ด๋ก๋ํ ์ ์์ต๋๋ค. - CSS ์ ํ์ ์ต์ ํ: ๋ณต์กํ CSS ์ ํ์๋ ์ฑ๋ฅ ์ง์ฝ์ ์ผ ์ ์์ต๋๋ค. ์ง๋์น๊ฒ ๊ตฌ์ฒด์ ์ธ ์ ํ๊ธฐ๋ฅผ ์ฌ์ฉํ์ง ๋ง๊ณ ๋ณด๋ค ํจ์จ์ ์ธ ์ ํ๊ธฐ๋ฅผ ์ฌ์ฉํ์ญ์์ค.
- CSS Containment ์ฌ์ฉ: CSS Containment Module์ ์ฌ์ฉํ๋ฉด ์น์ฌ์ดํธ์ ์ผ๋ถ๋ฅผ ๊ฒฉ๋ฆฌํ์ฌ ์ฌ์ดํธ์ ํ ๋ถ๋ถ์์ ๋ณ๊ฒฝ ์ฌํญ์ด ์ฌ์ดํธ์ ๋ค๋ฅธ ๋ถ๋ถ์์ ๋ฆฌํ๋ก์ฐ ๋ฐ ๋ฆฌํ์ธํธ๋ฅผ ํธ๋ฆฌ๊ฑฐํ๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
- ๋ธ๋ผ์ฐ์ ์บ์ฑ ํ์ฉ: ์น ์๋ฒ๋ฅผ ๊ตฌ์ฑํ์ฌ CSS ํ์ผ์ ์ ์ ํ๊ฒ ์บ์ฑํ์ฌ ๋ธ๋ผ์ฐ์ ๊ฐ ํ์ผ์ ๋ฐ๋ณต์ ์ผ๋ก ๋ค์ด๋ก๋ํ๋ ๋์ ์บ์๋ ํ์ผ์ ์ฌ์ฌ์ฉํ ์ ์๋๋ก ํฉ๋๋ค.
- CSS ์ ์ฒ๋ฆฌ๊ธฐ ์ฌ์ฉ: Sass ๋ฐ Less์ ๊ฐ์ CSS ์ ์ฒ๋ฆฌ๊ธฐ๋ ๋ณด๋ค ์ ์ง ๊ด๋ฆฌ ๊ฐ๋ฅํ๊ณ ํจ์จ์ ์ธ CSS๋ฅผ ์์ฑํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค. ๋ณ์, ๋ฏน์ค์ธ ๋ฐ ์ค์ฒฉ๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฌ CSS ๊ฐ๋ฐ์ ๋จ์ํํ๊ณ ์ฑ๋ฅ์ ๊ฐ์ ํ ์ ์์ต๋๋ค.
- ์ค์ํ CSS ๊ณ ๋ ค: ์ค์ํ CSS๋ ์น์ฌ์ดํธ์ ์ฒซ ํ๋ฉด ์ฝํ ์ธ ๋ฅผ ๋ ๋๋งํ๋ ๋ฐ ํ์ํ ์ต์ํ์ CSS์ ๋๋ค. ์ค์ํ CSS๋ฅผ ์ธ๋ผ์ธํ๊ณ ์ค์ํ์ง ์์ CSS์ ๋ก๋ฉ์ ์ง์ฐ์์ผ ์น์ฌ์ดํธ์ ์ธ์ ๋ก๋ฉ ์๊ฐ์ ๊ฐ์ ํ ์ ์์ต๋๋ค.
CSS ์ต์ ํ๋ฅผ ์ํ ๊ธ๋ก๋ฒ ๊ณ ๋ ค ์ฌํญ
๊ธ๋ก๋ฒ ์ฌ์ฉ์๋ฅผ ์ํด CSS๋ฅผ ์ต์ ํํ ๋ ๋ค์ ์์๋ฅผ ๊ณ ๋ คํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
- ๊ธ๊ผด ๋ก๋ฉ: ํ์ผ ํฌ๊ธฐ ๋ฐ ๋ก๋ฉ ์ฑ๋ฅ์ ๊ณ ๋ คํ์ฌ ์น ๊ธ๊ผด์ ์ ์คํ๊ฒ ์ ํํ์ญ์์ค. FOIT(Flash of Invisible Text) ๋ฐ FOUT(Flash of Unstyled Text)๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด font-display ์ ๋ต์ ์ฌ์ฉํ์ญ์์ค. ํ์ผ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ณ ์ฑ๋ฅ์ ๊ฐ์ ํ๊ธฐ ์ํด ๊ฐ๋ณ ๊ธ๊ผด์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ณ ๋ คํ์ญ์์ค.
- ์ด๋ฏธ์ง ์ต์ ํ: ๋ค๋ฅธ ์ฅ์น ๋ฐ ํ๋ฉด ํด์๋์ ๋ง๊ฒ ์ด๋ฏธ์ง๋ฅผ ์ต์ ํํ์ญ์์ค. ๋ฐ์ํ ์ด๋ฏธ์ง์ ์ ์ ํ ์ด๋ฏธ์ง ํ์(WebP, AVIF)์ ์ฌ์ฉํ์ฌ ํ์ผ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ณ ๋ก๋ฉ ์๊ฐ์ ๊ฐ์ ํ์ญ์์ค.
- CDN(์ฝํ ์ธ ์ ์ก ๋คํธ์ํฌ) ์ฌ์ฉ: CDN์ ์ฌ์ฉํ์ฌ CSS ํ์ผ์ ์ ์ธ๊ณ ์ฌ๋ฌ ์๋ฒ์ ๋ฐฐํฌํ์ฌ ๋๊ธฐ ์๊ฐ์ ์ค์ด๊ณ ๋ค๋ฅธ ์ง์ญ์ ์ฌ์ฉ์๋ฅผ ์ํ ๋ค์ด๋ก๋ ์๋๋ฅผ ๊ฐ์ ํ์ญ์์ค.
- ์ง์ญํ: CSS๊ฐ ๋ค๋ฅธ ์ธ์ด์ ๋ฌธ์ ์งํฉ์ ์ง์ํ๋์ง ํ์ธํ์ญ์์ค. ์ ์ ํ ๊ธ๊ผด ๊ณ์ด ๋ฐ ํ ์คํธ ๋ ๋๋ง ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ ์ธ์ด๋ก ํ ์คํธ๊ฐ ์ ๋๋ก ํ์๋๋๋ก ํ์ญ์์ค.
- ์ ๊ทผ์ฑ: CSS๊ฐ ์ฅ์ ๊ฐ ์๋ ์ฌ์ฉ์๊ฐ ์ ๊ทผํ ์ ์๋์ง ํ์ธํ์ญ์์ค. ์๋ฏธ๋ก ์ HTML ๋ฐ ARIA ์์ฑ์ ์ฌ์ฉํ์ฌ ๋ณด์กฐ ๊ธฐ์ ์ด ์น์ฌ์ดํธ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ๋ ๋๋งํ๋ ๋ฐ ํ์ํ ์ ๋ณด๋ฅผ ์ ๊ณตํ์ญ์์ค.
๊ฒฐ๋ก
CSS ํธ๋ ๊ท์น์ ์ฑ๋ฅ ์ถ์ ๋ฐ ์ต์ ํ๋ฅผ ์ํ ๊ฐ๋ ฅํ ๋๊ตฌ์ ๋๋ค. ํธ๋ ๊ท์น์ ๊ตฌํํ๊ณ ์์ฑ๋ ์ฑ๋ฅ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ์ฌ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์๋ณํ๊ณ ์ต์ ์ ์น์ฌ์ดํธ ์๋์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ํด CSS๋ฅผ ์ต์ ํํ ์ ์์ต๋๋ค. ๋ค๋ฅธ ๊ณ ๊ธ CSS ์ต์ ํ ๊ธฐ์ ๊ณผ ๊ฒฐํฉ๋ CSS ํธ๋ ๊ท์น์ ์ ์ธ๊ณ ์ฌ์ฉ์์ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ๋ ๋น ๋ฅด๊ณ ๋ฐ์์ด ๋น ๋ฅด๋ฉฐ ๋งค๋ ฅ์ ์ธ ์น์ฌ์ดํธ๋ฅผ ์ ๊ณตํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค. ์ ์ธ๊ณ ์ฌ์ฉ์๋ฅผ ์ํด CSS๋ฅผ ์ต์ ํํ ๋ ๊ธ๊ผด ๋ก๋ฉ, ์ด๋ฏธ์ง ์ต์ ํ ๋ฐ ์ง์ญํ์ ๊ฐ์ ๊ธ๋ก๋ฒ ์์๋ฅผ ๊ณ ๋ คํ์ญ์์ค. ๋ฐ์ดํฐ ๊ธฐ๋ฐ ์ต์ ํ๋ฅผ ์์ฉํ๊ณ ์น์ฌ์ดํธ์ ์ฑ๋ฅ์ ์ง์์ ์ผ๋ก ๋ชจ๋ํฐ๋งํ์ฌ ์์น๋ ์ฅ์น์ ๊ด๊ณ์์ด ๋ชจ๋ ์ฌ์ฉ์์๊ฒ ์ํํ ์ฌ์ฉ์ ๊ฒฝํ์ ๋ณด์ฅํ์ญ์์ค.